/*
 * 说明：
 * 1.画流程图，明确实现过程
 * 2.要学会拆分，把复杂大问题，拆成容易实现的小问题
 * 3.可以把具体功能点写成一个方法，然后需要时调用（适当的封装）
 * 4.可以把核心功能先写出来，然后一点点完善、补充，不要想一步到位
 */

// static 关键字，大家照抄就可以，后续会介绍
import java.util.Scanner;
public class ATM {
    static double balance=10000.0;// 模拟初始余额为10000元
    static Scanner sc=new Scanner(System.in); // 为何加static 修饰，暂时忽略
    
    public static void main(String[] args) {
        // 1.显示欢迎界面  
        showWelcome(); 				                
        // 2.用户登录：运行3次尝试，尝试3次失败后则结束程序
        for(int i=0;i<3;i++){
            boolean isLogin=userLogin();    // 2.验证用户登录状态
            if(isLogin){
                break;              //登录成功，跳出循环
            }
            System.out.println();
            System.out.println();
            System.out.println("卡号或密码不正确，请重新操作！");
            if(i==2){
                System.out.println();
                System.out.println();
                System.out.println("尝试次数过多，请稍后操作！");
                sc.close();  //关闭Scanner对象
                exitATM();   //退卡
                return;      //结束程序 
            }
        }
        // 3. 登录成功后，显示主操作界面
         showMain();
         String obj=""; 
         while(true){
            obj=sc.next();
            switch (obj) {
               case "1":
                   show();//查询余额
                   break;
               case "2":
                   sub();//提取现金
                   break;
               case "3":
                   add();//存款
                   break;
               case "4":
                   sc.close();  //关闭Scanner对象
                   exitATM();   //退卡
                   return;      //结束程序        
               default:
                   System.out.println("输入数据不符合要求，请重新输入！");    
            }
         }
        
    }
    
    //【7】退卡
    static void exitATM(){
        System.out.println("卡已退出…………");
        showWelcome();//显示欢迎界面
    }
 
    //【6】存钱
    static void add(){
        System.out.println();
        System.out.println("请输入存款金额：");
        System.out.println("提示：只可输入数字！");
        int number=sc.nextInt();
        if(number > 0){
            balance +=number;
            System.out.println("存款成功！");
        }
        else {
            System.out.println("输入错误，存款失败！");
        }
        System.out.println();
        show();//查询余额
    }
    
    //【5】取钱
    static void sub(){
        System.out.println();
        System.out.println("请输入取款金额:");
        System.out.println("提示：只可输入数字！");
        int number=sc.nextInt(); //注意注意注意注意注意注意注意====这里的方法名==================
        if(number > balance){
            System.out.println("余额不足，取款失败！");
        }else {
            balance-=number;
            System.out.println("取款成功！");
        }
        System.out.println();
        show();//查询余额
    }
    
    //【4】 查询余额
    static void show(){
        System.out.println();
        System.out.println();
        System.out.println("当前余额为： " + balance + " 元");
        System.out.println();
        System.out.println();
        showMain();//显示主操作界面
    }

    // 【3】显示主操作界面
    static void showMain(){
        System.out.println("======================================");
        System.out.println("主菜单：");
        System.out.println("1-查询余额");
        System.out.println("2-提取现金");
        System.out.println("3-存款");
        System.out.println("4-退出");
        System.out.println("======================================");
        System.out.println("请输入选择序号：");
    }

    // 【2】拟插卡输入密码验证功能
    static boolean userLogin() { //boolean 为Java的一种基本数据类型，只有true和false两个值
        // 假设正确的卡号为：“111” 密码为 “123”        
        System.out.println("请输入卡号：");
        System.out.println("提示：模拟插入银行卡，系统中仅有卡号111，其它无效！");
        String inCardNo=sc.next();
        System.out.println("请输入密码：");
        System.out.println("提示：默认123！");
        String inPassword=sc.next();
        if (inCardNo.equals("111") && inPassword.equals("123"))
            return true;   //【思考】为何不在这里直接输出登录成功，而是返回给调用者一个真假值？
            else return false;
    }

    // 【1】打印欢迎信息
    static void showWelcome() {
        System.out.println("###########################################################");
        System.out.println("欢迎使用工商银行自动取款机！");
        System.out.println("###########################################################");
    }
}